package visitor_pattern.impl;

import visitor_pattern.Customer;
import visitor_pattern.IVisitor;
import visitor_pattern.Item;
import visitor_pattern.Order;

/**
 * @author 申书航
 * @version 1.0
 *
 * GeneralReport类实现了IVisitor接口，用于生成客户、订单和商品的报告。
 */
public class GeneralReport implements IVisitor {

    private int totalItems;      // 商品数量统计

    private int totalOrders;     // 订单数量统计

    private int totalCustomers;   // 顾客数量统计

    @Override
    /**
     * 访问商品对象并显示其信息，然后增加商品计数。
     */
    public void visit(Item item) {
        item.showInfo();
        totalItems++;
    }

    @Override
    /**
     * 访问订单对象并显示其信息，然后增加订单计数。
     */
    public void visit(Order order) {
        order.showInfo();
        totalOrders++;
    }

    @Override
    /**
     * 访问顾客对象并显示其信息，然后增加顾客计数。
     */
    public void visit(Customer customer) {
        customer.showInfo();
        totalCustomers++;
    }

    /**
     * 显示统计报告，包括总顾客数，总订单数和总商品数。
     */
    public void displayReport() {
        System.out.println();
        System.out.println("顾客总数: " + totalCustomers);
        System.out.println("订单总数: " + totalOrders);
        System.out.println("商品总数: " + totalItems);
    }
}
